﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Tipler.Siniflar;
using Tipler.DataSetler;
using Tipler.RaporDataSetler;
using DataServis;
using System.Data;
using Tipler.Enumlar;

namespace IsKurallari.Sozlesme
{
    public class SozlesmeIsKurali : TemelIsKurali
    {

        public FonksiyonSonuc<SozlesmeDataSet> SozlesmeKaydet(SozlesmeDataSet dsSozlesme, SozlesmeTalepEdilenIsDataSet dsSozlesmeTalepEdilenIs)
        {
            FonksiyonSonuc<SozlesmeDataSet> sonuc = new FonksiyonSonuc<SozlesmeDataSet>();
            try
            {
                VeriArabirim oVeriKatmani = VeriServis.VeriTabaniObjesiGetir();

                if (dsSozlesme != null)
                    oVeriKatmani.TopluVeriIslemeIDDondur(dsSozlesme);
                if (dsSozlesmeTalepEdilenIs != null)
                {
                    foreach (SozlesmeTalepEdilenIsDataSet.SozlesmeTalepEdilenIsRow dr in dsSozlesmeTalepEdilenIs.SozlesmeTalepEdilenIs.Rows)
                    {
                        if (dr.RowState == DataRowState.Added)
                            dr.SozlesmeID = Convert.ToInt32(dsSozlesme.Sozlesme.Rows[dsSozlesme.Sozlesme.Count - 1]["SozlesmeID"].ToString());
                    }

                    oVeriKatmani.TopluVeriIsleme(dsSozlesmeTalepEdilenIs);
                }

                sonuc.Sonuc = dsSozlesme;
            }
            catch (Exception ex)
            {
                sonuc.Sonuc = null;
                sonuc.Ex = ex;
                sonuc.Hata = "Sozlesme kaydedilemedi.";
                sonuc.HataKod = "70001";
            }
            return sonuc;
        }

        public FonksiyonSonuc<SozlesmeDataSet> SozlesmeGetirbySozlesmeID(int SozlesmeID)
        {
            FonksiyonSonuc<SozlesmeDataSet> sonuc = new FonksiyonSonuc<SozlesmeDataSet>();
            SozlesmeDataSet ds = new SozlesmeDataSet();
            try
            {
                VeriArabirim oVeriKatmani = VeriServis.VeriTabaniObjesiGetir();

                List<IDbDataParameter> pParams = new List<IDbDataParameter>();
                pParams.Add(oVeriKatmani.CreateParameter("SozlesmeID", DbType.Int32, SozlesmeID));

                oVeriKatmani.VeriGetir(ds, "SELECT * FROM Sozlesme where SozlesmeID=@SozlesmeID", pParams);
                sonuc.Sonuc = ds;
            }
            catch (Exception ex)
            {
                sonuc.Ex = ex;
                sonuc.Hata = "Sozlesme okunamadı.";
                sonuc.HataKod = "70001";
            }
            return sonuc;
        }

        public FonksiyonSonuc<SozlesmeTalepEdilenIsDataSet> SozlesmeTalepEdilenIsGetirbySozlesmeID(int SozlesmeID)
        {
            FonksiyonSonuc<SozlesmeTalepEdilenIsDataSet> sonuc = new FonksiyonSonuc<SozlesmeTalepEdilenIsDataSet>();
            SozlesmeTalepEdilenIsDataSet ds = new SozlesmeTalepEdilenIsDataSet();
            try
            {
                VeriArabirim oVeriKatmani = VeriServis.VeriTabaniObjesiGetir();

                List<IDbDataParameter> pParams = new List<IDbDataParameter>();
                pParams.Add(oVeriKatmani.CreateParameter("SozlesmeID", DbType.Int32, SozlesmeID));

                oVeriKatmani.VeriGetir(ds, "SELECT * FROM SozlesmeTalepEdilenIs where SozlesmeID=@SozlesmeID", pParams);
                sonuc.Sonuc = ds;
            }
            catch (Exception ex)
            {
                sonuc.Ex = ex;
                sonuc.Hata = "Sozlesme okunamadı.";
                sonuc.HataKod = "70001";
            }
            return sonuc;
        }

        public FonksiyonSonuc<SozlesmeDataSet> SozlesmeGetir(string SozlesmeNo, int KullaniciID, string MusteriAdi, string MusteriSoyadi, DateTime SozlesmeBasTarih, DateTime SozlesmeBitTarih,
            int IlID, int IlceID, string KoyMahalle, string AdaNo, string ParselNo, int YuzOlcumuBasDeger, int YuzolcumuBitDeger, int SozlesmeDurum)
        {
            FonksiyonSonuc<SozlesmeDataSet> sonuc = new FonksiyonSonuc<SozlesmeDataSet>();
            SozlesmeDataSet ds = new SozlesmeDataSet();
            try
            {
                VeriArabirim oVeriKatmani = VeriServis.VeriTabaniObjesiGetir();
                List<IDbDataParameter> pParams = new List<IDbDataParameter>();

                StringBuilder sbSQL = new StringBuilder();
                sbSQL.Append(" SELECT S.*,S.Adi+' '+S.Soyadi as ISIM,K.Adi+' '+K.Soyadi as Muhendis FROM dbo.Sozlesme S ");
                sbSQL.Append("      INNER JOIN Kullanici K ON S.KayitYapanKullaniciID=K.KullaniciID ");
                sbSQL.Append(" WHERE 1=1 ");
                if (SozlesmeNo != "0")
                {
                    sbSQL.Append(" AND S.KayitNo=" + PrmSgn + "KayitNo ");
                    pParams.Add(oVeriKatmani.CreateParameter("KayitNo", DbType.String, SozlesmeNo));
                }
                if (KullaniciID != -1)
                {
                    sbSQL.Append(" AND S.KayitYapanKullaniciID=" + PrmSgn + "KullaniciID ");
                    pParams.Add(oVeriKatmani.CreateParameter("KullaniciID", DbType.Int32, KullaniciID));
                }
                if (MusteriAdi != "")
                {
                    sbSQL.Append(" AND S.Adi like " + PrmSgn + "Adi ");
                    pParams.Add(oVeriKatmani.CreateParameter("Adi", DbType.String, "%" + MusteriAdi + "%"));
                }
                if (MusteriSoyadi != "")
                {
                    sbSQL.Append(" AND S.Soyadi like " + PrmSgn + "Soyadi ");
                    pParams.Add(oVeriKatmani.CreateParameter("Soyadi", DbType.String, "%" + MusteriSoyadi + "%"));
                }
                if (SozlesmeBasTarih != DateTime.MinValue && SozlesmeBitTarih != DateTime.MinValue)
                {
                    sbSQL.Append(" AND S.KayitTarihi BETWEEN " + PrmSgn + "SozlesmeBasTarih AND " + PrmSgn + "SozlesmeBitTarih ");
                    pParams.Add(oVeriKatmani.CreateParameter("SozlesmeBasTarih", DbType.DateTime, SozlesmeBasTarih));
                    pParams.Add(oVeriKatmani.CreateParameter("SozlesmeBitTarih", DbType.DateTime, SozlesmeBitTarih));
                }
                if (IlID != -1)
                {
                    sbSQL.Append(" AND S.IlID=" + PrmSgn + "IlID ");
                    pParams.Add(oVeriKatmani.CreateParameter("IlID", DbType.Int32, IlID));
                }
                if (IlceID != -1)
                {
                    sbSQL.Append(" AND S.IlceID=" + PrmSgn + "IlceID ");
                    pParams.Add(oVeriKatmani.CreateParameter("IlceID", DbType.Int32, IlceID));
                }
                if (KoyMahalle != "")
                {
                    sbSQL.Append(" AND S.KoyMahalle like " + PrmSgn + "KoyMahalle ");
                    pParams.Add(oVeriKatmani.CreateParameter("KoyMahalle", DbType.String, "%" + KoyMahalle + "%"));
                }
                if (AdaNo != "")
                {
                    sbSQL.Append(" AND S.AdaNo like " + PrmSgn + "AdaNo ");
                    pParams.Add(oVeriKatmani.CreateParameter("AdaNo", DbType.String, "%" + AdaNo + "%"));
                }
                if (ParselNo != "")
                {
                    sbSQL.Append(" AND S.ParselNo like " + PrmSgn + "ParselNo ");
                    pParams.Add(oVeriKatmani.CreateParameter("ParselNo", DbType.String, "%" + ParselNo + "%"));
                }
                if (YuzOlcumuBasDeger != 0 && YuzolcumuBitDeger != 0)
                {
                    sbSQL.Append(" AND S.YuzOlcumu BETWEEN " + PrmSgn + "YuzOlcumuBasDeger AND " + PrmSgn + "YuzolcumuBitDeger ");
                    pParams.Add(oVeriKatmani.CreateParameter("YuzOlcumuBasDeger", DbType.Int32, YuzOlcumuBasDeger));
                    pParams.Add(oVeriKatmani.CreateParameter("YuzolcumuBitDeger", DbType.Int32, YuzolcumuBitDeger));
                }
                if (SozlesmeDurum != -1)
                {
                    sbSQL.Append(" AND S.Durum=" + PrmSgn + "SozlesmeDurum ");
                    pParams.Add(oVeriKatmani.CreateParameter("SozlesmeDurum", DbType.Int32, SozlesmeDurum));
                }

                oVeriKatmani.VeriGetir(ds, sbSQL.ToString(), pParams);
                sonuc.Sonuc = ds;
            }
            catch (Exception ex)
            {
                sonuc.Ex = ex;
                sonuc.Hata = "Sozlesme tablosu okunamadı.";
                sonuc.HataKod = "70001";
            }
            return sonuc;
        }



        public FonksiyonSonuc<DSSozlesme> SozlesmeRaporGetir(int SozlesmeID)
        {
            FonksiyonSonuc<DSSozlesme> sonuc = new FonksiyonSonuc<DSSozlesme>();
            DSSozlesme ds = new DSSozlesme();
            try
            {
                VeriArabirim oVeriKatmani = VeriServis.VeriTabaniObjesiGetir();
                List<IDbDataParameter> pParams = new List<IDbDataParameter>();

                StringBuilder sbSQL = new StringBuilder();
                sbSQL.Append("SELECT  il.IlAdi AS IL  , ");
                sbSQL.Append("        ilce.IlceAdi AS ILCE, ");
                sbSQL.Append("        S.KoyMahalle AS KOY, ");
                sbSQL.Append("        S.MalikAdi AS MALIKI , ");
                sbSQL.Append("        S.AdaNo + '/' +S.ParselNo as ADAPARSELNO, ");
                sbSQL.Append("        s.PlanNo + '/' +s.PaftaNo as PLANNO,  ");
                sbSQL.Append("        CONVERT(VARCHAR(10),S.KayitTarihi,104)  + '/' + S.KayitNo as KAYITTARIHINO,  ");
                sbSQL.Append("        S.YuzOlcumu AS YUZOLCUMU ,  ");
                sbSQL.Append("        '' TALEPEDILENIS ,  ");
                sbSQL.Append("        s.IsinYapilacagiTarih as GUNTARIHSAAT  ,  ");
                sbSQL.Append("         CASE WHEN Aplikasyon.SozlesmeTalepEdilenIsID IS NULL THEN '' ELSE 'X' END AS APLIKASYON,  ");
                sbSQL.Append("         CASE WHEN Birlestirme.SozlesmeTalepEdilenIsID IS NULL THEN '' ELSE 'X' END AS BIRLESTIRME,  ");
                sbSQL.Append("         CASE WHEN IrtifakTesis.SozlesmeTalepEdilenIsID IS NULL THEN '' ELSE 'X' END AS IRTIFAKTESISI, ");
                sbSQL.Append("         CASE WHEN IrtifakTerkini.SozlesmeTalepEdilenIsID IS NULL THEN '' ELSE 'X' END AS IRTIFAKTERKINI, ");
                sbSQL.Append("         CASE WHEN CinsYapisizken.SozlesmeTalepEdilenIsID IS NULL THEN '' ELSE 'X' END AS CINSYAPISIZKEN, ");
                sbSQL.Append("         CASE WHEN CinsYapiliyken.SozlesmeTalepEdilenIsID IS NULL THEN '' ELSE 'X' END AS CINSYAPILIYKEN, ");
                sbSQL.Append("         CASE WHEN YerGostermeBagimsiz.SozlesmeTalepEdilenIsID IS NULL THEN '' ELSE 'X' END AS YERGOSTERMEBAGIMSIZ, ");
                sbSQL.Append("         CASE WHEN YerGostermeParsel.SozlesmeTalepEdilenIsID IS NULL THEN '' ELSE 'X' END AS YERGOSTERMEPARSEL, ");
                sbSQL.Append("         ISNULL(Aplikasyon.Ucret,0) as YI_APLIKASYON, ");
                sbSQL.Append("         ISNULL(CinsYapiliyken.Ucret,0)+ISNULL(CinsYapisizken.Ucret,0) AS YI_CINSDEGISIKLIGI, ");
                sbSQL.Append("         ISNULL(Birlestirme.Ucret,0) as YI_BIRLESTIRME, ");
                sbSQL.Append("         ISNULL(IrtifakTerkini.Ucret,0)+ISNULL(IrtifakTesis.Ucret,0) AS YI_IRTIFAKHAKKI, ");
                sbSQL.Append("         ISNULL(YerGostermeBagimsiz.Ucret,0)+ISNULL(YerGostermeParsel.Ucret,0) AS YI_YERGOSTERME, ");
                sbSQL.Append("         S.Ucret AS YI_TOPLAM, ");
                sbSQL.Append("         S.UcretKDVDahil - s.Ucret AS YI_KDV, ");
                sbSQL.Append("         S.UcretKDVDahil AS YI_GENELTOPLAM, ");
                sbSQL.Append("         K.Adi +' '+K.Soyadi AS LM_ADSOYAD, ");
                sbSQL.Append("         K.BuroNo AS LM_BURONO, ");
                sbSQL.Append("         K.BelgeNo AS LM_BELGENO, ");
                sbSQL.Append("         K.SicilNo AS LM_ODASICILNO, ");
                sbSQL.Append("         S.Adi + ' ' + S.Soyadi AS SAHIBI_ADSOYAD, ");
                sbSQL.Append("         S.TCKimlikNo AS SAHIBI_TCKIMLIKNO, ");
                sbSQL.Append("         S.TelefonNo AS SAHIBI_TELEFON, ");
                sbSQL.Append("         S.Adres AS SAHIBI_ADRES ");
                sbSQL.Append(" FROM    Sozlesme S ");
                sbSQL.Append("        INNER JOIN IlPrm il on s.IlID=il.IlID ");
                sbSQL.Append("        INNER JOIN IlcePrm ilce on s.IlceID=ilce.IlceID ");
                sbSQL.Append("        INNER JOIN Kullanici K on S.LisansSahibiKullaniciID=K.KullaniciID ");
                sbSQL.Append("        LEFT JOIN SozlesmeTalepEdilenIs Aplikasyon ON S.SozlesmeID = Aplikasyon.SozlesmeID ");
                sbSQL.Append("                                              AND Aplikasyon.IsTurID = 1 ");
                sbSQL.Append("        LEFT JOIN SozlesmeTalepEdilenIs Birlestirme ON S.SozlesmeID = Birlestirme.SozlesmeID ");
                sbSQL.Append("                                              AND Birlestirme.IsTurID = 2 ");
                sbSQL.Append("        LEFT JOIN SozlesmeTalepEdilenIs IrtifakTesis ON S.SozlesmeID = IrtifakTesis.SozlesmeID ");
                sbSQL.Append("                                              AND IrtifakTesis.IsTurID = 3 ");
                sbSQL.Append("        LEFT JOIN SozlesmeTalepEdilenIs IrtifakTerkini ON S.SozlesmeID = IrtifakTerkini.SozlesmeID ");
                sbSQL.Append("                                              AND IrtifakTerkini.IsTurID = 4    ");
                sbSQL.Append("        LEFT JOIN SozlesmeTalepEdilenIs CinsYapisizken ON S.SozlesmeID = CinsYapisizken.SozlesmeID ");
                sbSQL.Append("                                              AND CinsYapisizken.IsTurID = 5 ");
                sbSQL.Append("        LEFT JOIN SozlesmeTalepEdilenIs CinsYapiliyken ON S.SozlesmeID = CinsYapiliyken.SozlesmeID ");
                sbSQL.Append("                                              AND CinsYapiliyken.IsTurID = 6 ");
                sbSQL.Append("        LEFT JOIN SozlesmeTalepEdilenIs YerGostermeParsel ON S.SozlesmeID = YerGostermeParsel.SozlesmeID ");
                sbSQL.Append("                                              AND YerGostermeParsel.IsTurID = 7 ");
                sbSQL.Append("        LEFT JOIN SozlesmeTalepEdilenIs YerGostermeBagimsiz ON S.SozlesmeID = YerGostermeBagimsiz.SozlesmeID ");
                sbSQL.Append("                                                              AND YerGostermeBagimsiz.IsTurID = 8SELECT S.*,S.Adi+' '+S.Soyadi as ISIM,K.Adi+' '+K.Soyadi as Muhendis FROM dbo.Sozlesme S ");
                sbSQL.Append("        INNER JOIN Kullanici K ON S.KayitYapanKullaniciID=K.KullaniciID ");
                sbSQL.Append(" WHERE 1=1 ");
                if (SozlesmeID != -1)
                {
                    sbSQL.Append(" AND S.SozlesmeID=" + PrmSgn + "SozlesmeID ");
                    pParams.Add(oVeriKatmani.CreateParameter("SozlesmeID", DbType.Int32, SozlesmeID));
                }

                oVeriKatmani.VeriGetir(ds, sbSQL.ToString(), pParams);
                sonuc.Sonuc = ds;
            }
            catch (Exception ex)
            {
                sonuc.Ex = ex;
                sonuc.Hata = "Sozlesme tablosu okunamadı.";
                sonuc.HataKod = "70001";
            }
            return sonuc;
        }

        public FonksiyonSonuc<IsTurChart> SozlesmeRaporGetir()
        {
            FonksiyonSonuc<IsTurChart> sonuc = new FonksiyonSonuc<IsTurChart>();
            IsTurChart ds = new IsTurChart();
            try
            {
                VeriArabirim oVeriKatmani = VeriServis.VeriTabaniObjesiGetir();
                //List<IDbDataParameter> pParams = new List<IDbDataParameter>();

                StringBuilder sbSQL = new StringBuilder();
                sbSQL.Append(" SELECT  IsTurAdi, COUNT(1) AS Sayi ");
                sbSQL.Append(" FROM    IsTurPrm IT ");
                sbSQL.Append("      INNER JOIN SozlesmeTalepEdilenIs SI ON IT.IsTurID = SI.IsTurID ");
                sbSQL.Append(" GROUP BY IsTurAdi ");

                oVeriKatmani.VeriGetir(ds, sbSQL.ToString());
                sonuc.Sonuc = ds;
            }
            catch (Exception ex)
            {
                sonuc.Ex = ex;
                sonuc.Hata = "Sozlesme tablosu okunamadı.";
                sonuc.HataKod = "70001";
            }
            return sonuc;
        }


        public FonksiyonSonuc<HizmetUcretPrmDataSet> HizmetUcretGetir()
        {
            FonksiyonSonuc<HizmetUcretPrmDataSet> sonuc = new FonksiyonSonuc<HizmetUcretPrmDataSet>();
            HizmetUcretPrmDataSet ds = new HizmetUcretPrmDataSet();
            try
            {
                VeriArabirim oVeriKatmani = VeriServis.VeriTabaniObjesiGetir();

                oVeriKatmani.VeriGetir(ds, "SELECT * FROM HizmetUcretPrm ");
                sonuc.Sonuc = ds;
            }
            catch (Exception ex)
            {
                sonuc.Ex = ex;
                sonuc.Hata = "HizmetUcretPrm okunamadı.";
                sonuc.HataKod = "70001";
            }
            return sonuc;
        }

    }
}
